home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / perl / 5.10.0 / DynaLoader.pm < prev    next >
Text File  |  2009-10-01  |  7KB  |  230 lines

  1. # Generated from DynaLoader_pm.PL
  2.  
  3. package DynaLoader;
  4.  
  5. #   And Gandalf said: 'Many folk like to know beforehand what is to
  6. #   be set on the table; but those who have laboured to prepare the
  7. #   feast like to keep their secret; for wonder makes the words of
  8. #   praise louder.'
  9.  
  10. #   (Quote from Tolkien suggested by Anno Siegel.)
  11. #
  12. # See pod text at end of file for documentation.
  13. # See also ext/DynaLoader/README in source tree for other information.
  14. #
  15. # Tim.Bunce@ig.co.uk, August 1994
  16.  
  17. BEGIN {
  18.     $VERSION = '1.08';
  19. }
  20.  
  21. require AutoLoader;
  22. *AUTOLOAD = \&AutoLoader::AUTOLOAD;
  23.  
  24. use Config;
  25.  
  26. # enable debug/trace messages from DynaLoader perl code
  27. $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug;
  28.  
  29. #
  30. # Flags to alter dl_load_file behaviour.  Assigned bits:
  31. #   0x01  make symbols available for linking later dl_load_file's.
  32. #         (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL))
  33. #         (ignored under VMS; effect is built-in to image linking)
  34. #
  35. # This is called as a class method $module->dl_load_flags.  The
  36. # definition here will be inherited and result on "default" loading
  37. # behaviour unless a sub-class of DynaLoader defines its own version.
  38. #
  39.  
  40. sub dl_load_flags { 0x00 }
  41.  
  42. # ($dl_dlext, $dlsrc)
  43. #         = @Config::Config{'dlext', 'dlsrc'};
  44.   ($dl_dlext, $dlsrc) = ('so', 'dl_dlopen.xs')
  45. ;
  46.  
  47. $do_expand = 0;
  48.  
  49. @dl_require_symbols = ();       # names of symbols we need
  50. @dl_resolve_using   = ();       # names of files to link with
  51. @dl_library_path    = ();       # path to look for files
  52.  
  53. #XSLoader.pm may have added elements before we were required
  54. #@dl_shared_objects  = ();       # shared objects for symbols we have 
  55. #@dl_librefs         = ();       # things we have loaded
  56. #@dl_modules         = ();       # Modules we have loaded
  57.  
  58. # This is a fix to support DLD's unfortunate desire to relink -lc
  59. @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs";
  60.  
  61. # Initialise @dl_library_path with the 'standard' library path
  62. # for this platform as determined by Configure.
  63.  
  64. push(@dl_library_path, split(' ', $Config::Config{libpth}));
  65.  
  66. my $ldlibpthname         = $Config::Config{ldlibpthname};
  67. my $ldlibpthname_defined = defined $Config::Config{ldlibpthname};
  68. my $pthsep               = $Config::Config{path_sep};
  69.  
  70. # Add to @dl_library_path any extra directories we can gather from environment
  71. # during runtime.
  72.  
  73. if ($ldlibpthname_defined &&
  74.     exists $ENV{$ldlibpthname}) {
  75.     push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname}));
  76. }
  77.  
  78. # E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH.
  79.  
  80. if ($ldlibpthname_defined &&
  81.     $ldlibpthname ne 'LD_LIBRARY_PATH' &&
  82.     exists $ENV{LD_LIBRARY_PATH}) {
  83.     push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH}));
  84. }
  85.  
  86. # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here.
  87. # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB
  88. boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) &&
  89.                                 !defined(&dl_error);
  90.  
  91. if ($dl_debug) {
  92.     print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n";
  93.     print STDERR "DynaLoader not linked into this perl\n"
  94.         unless defined(&boot_DynaLoader);
  95. }
  96.  
  97. 1; # End of main code
  98.  
  99. sub croak   { require Carp; Carp::croak(@_)   }
  100.  
  101. sub bootstrap_inherit {
  102.     my $module = $_[0];
  103.     local *isa = *{"$module\::ISA"};
  104.     local @isa = (@isa, 'DynaLoader');
  105.     # Cannot goto due to delocalization.  Will report errors on a wrong line?
  106.     bootstrap(@_);
  107. }
  108.  
  109. # The bootstrap function cannot be autoloaded (without complications)
  110. # so we define it here:
  111.  
  112. sub bootstrap {
  113.     # use local vars to enable $module.bs script to edit values
  114.     local(@args) = @_;
  115.     local($module) = $args[0];
  116.     local(@dirs, $file);
  117.  
  118.     unless ($module) {
  119.     require Carp;
  120.     Carp::confess("Usage: DynaLoader::bootstrap(module)");
  121.     }
  122.  
  123.     # A common error on platforms which don't support dynamic loading.
  124.     # Since it's fatal and potentially confusing we give a detailed message.
  125.     croak("Can't load module $module, dynamic loading not available in this perl.\n".
  126.     "  (You may need to build a new perl executable which either supports\n".
  127.     "  dynamic loading or has the $module module statically linked into it.)\n")
  128.     unless defined(&dl_load_file);
  129.  
  130.     
  131.     my @modparts = split(/::/,$module);
  132.     my $modfname = $modparts[-1];
  133.  
  134.     # Some systems have restrictions on files names for DLL's etc.
  135.     # mod2fname returns appropriate file base name (typically truncated)
  136.     # It may also edit @modparts if required.
  137.     $modfname = &mod2fname(\@modparts) if defined &mod2fname;
  138.  
  139.     
  140.  
  141.     my $modpname = join('/',@modparts);
  142.  
  143.     print STDERR "DynaLoader::bootstrap for $module ",
  144.                "(auto/$modpname/$modfname.so)\n"
  145.     if $dl_debug;
  146.  
  147.     foreach (@INC) {
  148.     
  149.     
  150.         my $dir = "$_/auto/$modpname";
  151.     
  152.     
  153.     next unless -d $dir; # skip over uninteresting directories
  154.     
  155.     # check for common cases to avoid autoload of dl_findfile
  156.     my $try =  "$dir/$modfname.so";
  157.     last if $file = (-f $try) && $try;
  158.     
  159.     
  160.     # no luck here, save dir for possible later dl_findfile search
  161.     push @dirs, $dir;
  162.     }
  163.     # last resort, let dl_findfile have a go in all known locations
  164.     $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file;
  165.  
  166.     croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)")
  167.     unless $file;    # wording similar to error from 'require'
  168.  
  169.     
  170.     my $bootname = "boot_$module";
  171.     $bootname =~ s/\W/_/g;
  172.     @dl_require_symbols = ($bootname);
  173.  
  174.     # Execute optional '.bootstrap' perl script for this module.
  175.     # The .bs file can be used to configure @dl_resolve_using etc to
  176.     # match the needs of the individual module on this architecture.
  177.     my $bs = $file;
  178.     $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library
  179.     if (-s $bs) { # only read file if it's not empty
  180.         print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug;
  181.         eval { do $bs; };
  182.         warn "$bs: $@\n" if $@;
  183.     }
  184.  
  185.     my $boot_symbol_ref;
  186.  
  187.     
  188.  
  189.     # Many dynamic extension loading problems will appear to come from
  190.     # this section of code: XYZ failed at line 123 of DynaLoader.pm.
  191.     # Often these errors are actually occurring in the initialisation
  192.     # C code of the extension XS file. Perl reports the error as being
  193.     # in this perl code simply because this was the last perl code
  194.     # it executed.
  195.  
  196.     my $libref = dl_load_file($file, $module->dl_load_flags) or
  197.     croak("Can't load '$file' for module $module: ".dl_error());
  198.  
  199.     push(@dl_librefs,$libref);  # record loaded object
  200.  
  201.     my @unresolved = dl_undef_symbols();
  202.     if (@unresolved) {
  203.     require Carp;
  204.     Carp::carp("Undefined symbols present after loading $file: @unresolved\n");
  205.     }
  206.  
  207.     $boot_symbol_ref = dl_find_symbol($libref, $bootname) or
  208.          croak("Can't find '$bootname' symbol in $file\n");
  209.  
  210.     push(@dl_modules, $module); # record loaded module
  211.  
  212.   boot:
  213.     my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file);
  214.  
  215.     # See comment block above
  216.  
  217.     push(@dl_shared_objects, $file); # record files loaded
  218.  
  219.     &$xs(@args);
  220. }
  221.  
  222. #sub _check_file {   # private utility to handle dl_expandspec vs -f tests
  223. #    my($file) = @_;
  224. #    return $file if (!$do_expand && -f $file); # the common case
  225. #    return $file if ( $do_expand && ($file=dl_expandspec($file)));
  226. #    return undef;
  227. #}
  228.  
  229. # Let autosplit and the autoloader deal with these functions:
  230.